//流光效果

@ccclass
@inspector
export default class Streamer extends cc.Component {

    @property(cc.Node)
    target: cc.Node = null;

    @property(cc.Node)
    streamer: cc.Node = null;

    startX = 0;

    onLoad() {
        if (this.streamer && this.streamer.isValid && this.streamer.active) {
            // 正切公式 直角三角形 已知角度和邻边 求对边
            // Math.tan()  角度转成弧度
            let val = (Math.tan(Math.PI * this.streamer.skewX / 180)) * (this.streamer.height / 2);
            // 对边角度加上两个节点的半径，得出流光的初始位置
            this.startX = val + (this.target.width / 2) + (this.streamer.width / 2);
        }

    }

    start() {
        this.ani();
        this.schedule(() => {
            this.ani();
        }, 2);
    }

    ani() {
        //如果有白光节点
        if (this.streamer && this.streamer.isValid && this.streamer.active) {
            //使用白光节点位移
            //初始化流光节点的位置
            this.streamer.x = -this.startX;
            //使用tween动画来让流光从左到右过渡
            cc.tween(this.streamer).to(0.5, { x: this.startX }).start();
        } else {
            //启动shader实现
            //禁用动态合图
            cc.dynamicAtlasManager.enabled = false;

            let obj = {
                x: 0,
            }
            let material: cc.Material = this.target.getComponent(cc.RenderComponent).getMaterial(0);
            cc.tween(obj).to(1, { x: 1 }, {
                progress: (start, end, current, time) => {
                    material.setProperty("lightCenterPoint", cc.v2(start + (end - start) * time, start + (end - start) * time));
                    return start + (end - start) * time;
                },
            }).start();
        }
    }

    // update (dt) {}
}
